//
//  UIButton+ZKChain.h
//  ChainFun
//
//  Created by 洪绵卫 on 2022/1/10.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

/*
     所有函数均只有getter函数.
     zk_frame 对应的 frame属性 其余一样，去除zk_ 后边的为对应的属性名
 */
@interface UIButton (ZKChain)
/* 因为父类的Category中返回的是UIView类型，不便于链式继续调用，所以这里写同名的get方法，返回值不同 */

/// 初始化 没有设置Frame
+ (UIButton * _Nonnull (^)(void))zk_allocInit;

/// 带Frame的初始化   
+ (UIButton * _Nonnull (^)(CGRect))zk_allocInitWithFrame;

/// 设置View的Frame
- (UIButton * _Nonnull (^)(CGRect))zk_frame;

/// 设置View的背景色
- (UIButton * _Nonnull (^)(UIColor * _Nonnull))zk_backgroundColor;

/// 将View添加到父视图上 
- (UIButton * _Nonnull (^)(UIView * _Nonnull))zk_addToSuperView;

/// 设置View是否允许交互
- (UIButton * _Nonnull (^)(BOOL))zk_userInteractionEnabled;

/// 设置View的Tag
- (UIButton * _Nonnull (^)(NSInteger))zk_tag;

/// 设置View的Bounds
- (UIButton * _Nonnull (^)(CGRect))zk_bounds;

/// 设置View的中心点
- (UIButton * _Nonnull (^)(CGPoint))zk_center;

/// 设置View的透明度
- (UIButton * _Nonnull (^)(CGFloat))zk_alpha;

/// 设置View的隐藏状态
- (UIButton * _Nonnull (^)(BOOL))zk_hidden;

/// 设置View的TitColor
- (UIButton * _Nonnull (^)(UIColor * _Nonnull))zk_tintColor;


#pragma mark 对应UIControl 的一些属性 去除zk_ 后为对应属性名

/// 设置按钮的选中状态
- (UIButton * _Nonnull (^)(BOOL))zk_selected;

/// 设置按钮的highlighted
- (UIButton * _Nonnull (^)(BOOL))zk_highlighted;

/// 设置按钮的highlighted
- (UIButton * _Nonnull (^)(BOOL))zk_enabled;


#pragma mark 对应UIButton 的一些属性 去除zk_ 后为对应属性名

/// 实例化UIButton
+ (UIButton * _Nonnull (^)(UIButtonType))zk_allocInitWithButtonType;

/// 设置按钮字体大小，Block一个参数  UIFont
- (UIButton * _Nonnull (^)(UIFont * _Nullable))zk_font;


#pragma mark 对应UIButton 的一些方法

/// 设置按钮标题 Block两个参数:   标题     状态
- (UIButton * _Nonnull (^)(NSString * _Nullable,UIControlState))zk_setTitleForState;

/// 设置按钮标题颜色   Block两个参数： 颜色   状态
- (UIButton * _Nonnull (^)(UIColor * _Nullable,UIControlState))zk_setTitleColorForState;

/// 设置前景图片
- (UIButton * _Nonnull (^)(UIImage * _Nullable,UIControlState))zk_setImageForState;

/// 设置背景图片
- (UIButton * _Nonnull (^)(UIImage * _Nullable,UIControlState))zk_setBackgroundImageForState;

/// 设置NSAttributedString
- (UIButton * _Nonnull (^)(NSAttributedString * _Nullable,UIControlState))zk_setAttributedTitleForState;

@end

NS_ASSUME_NONNULL_END
